package com.xl.basic.service;

import com.xl.basic.entity.Result;
import com.xl.basic.entity.SPage;
import com.xl.basic.entity.param.AddUserParam;
import com.xl.basic.entity.param.QueryUserParam;
import com.xl.basic.entity.param.UpdUserParam;
import com.xl.basic.entity.param.UpdUserPasswordParam;
import com.xl.basic.entity.UserInfo;
import com.xl.basic.entity.result.UserResult;
import lombok.NonNull;

import java.util.List;

/**
 * @author 钟勇
 * Create in 2023/8/25 11:13
 */
public interface UserService {
    /**
     * 新增用户
     *
     * @param param    param
     * @param operator 操作人
     * @return userId
     */
    Result<String> addUser(@NonNull AddUserParam param, UserInfo operator);

    /**
     * 编辑用户
     *
     * @param param    param
     * @param operator 操作人
     * @return result
     */
    Result<Object> updUser(@NonNull UpdUserParam param, UserInfo operator);

    /**
     * 编辑用户密码
     *
     * @param param    param
     * @param operator 操作人
     * @return result
     */
    Result<Object> updUserPassword(@NonNull UpdUserPasswordParam param, UserInfo operator);

    /**
     * 禁用用户
     *
     * @param userId   userId
     * @param operator 操作人
     * @return result
     */
    Result<Object> disableUser(@NonNull String userId, UserInfo operator);

    /**
     * 启用用户
     *
     * @param userId   userId
     * @param operator 操作人
     * @return result
     */
    Result<Object> enabledUser(@NonNull String userId, UserInfo operator);

    /**
     * 查单个用户
     *
     * @param userId userId
     * @return userInfo
     */
    Result<UserResult> getUserInfo(@NonNull String userId);

    /**
     * 查单个用户
     *
     * @param phone phone
     * @return userInfo
     */
    Result<UserResult> getUserInfoByPhone(@NonNull String phone);

    /**
     * 查询用户列表
     *
     * @param param param
     * @return list
     */
    Result<List<UserResult>> queryUserList(@NonNull QueryUserParam param);

    /**
     * 查询用户分页
     *
     * @param param param
     * @param sPage page
     * @return page
     */
    Result<List<UserResult>> queryUserPage(@NonNull QueryUserParam param, SPage sPage);

}
